/* $Id: ClientDAO.java 
 * Copyright (C) 2011, TRAKHEES
 *  
 * Revision History
 *
 * Date  			Author 		    	Remarks
 * ---------------------------------------------------------------------------------
 *
 */
package ae.pcfc.etks.online.common.dao;

import java.util.List;

import ae.pcfc.etks.online.common.domain.Client;
import ae.pcfc.etks.online.common.vo.TrakheesIdVO;

public interface ClientDAO {

	//public String add(ClientReq clientReq);
	
	/**
	 * add
	 * Method to add a Client record in DB
	 * @param client
	 * void
	 */
	public void add(Client client);
	
	/**
	 * update
	 * Method to update the Client object in DB
	 * @param client
	 * void
	 */
	public void update(Client client);
	
	//public ClientReq getClientByApplicationId(Long applicationId);
	
	/**
	 * findClientByUserName
	 * Method to find the Client of the User by Username
	 * @param userName
	 * @return
	 * Client
	 */
	public Client findClientByUserName(String userName);
	
	/**
	 * findTrakheesIdByUserName
	 * Method to find the Trakhees ID of the Client to which an user is associated
	 * @param userName
	 * @return
	 * String
	 */
	public String findTrakheesIdByUserName(String userName);
	
	/**
	 * findByPrimaryKey
	 * Method to find the Client domain object by primary key
	 * @param id
	 * @return
	 * Client
	 */
	public Client findByPrimaryKey(Long id);
	
	/**
	 * findClientUserByEmail
	 * Method to find the Client domain object by email address
	 * @param email
	 * @return
	 * Client
	 */
	public Client findClientUserByEmail(String email);
	
	/**
	 * findByTrakheesIds
	 * Method to find the list of Client domain objects corresponding to the list of Trakhees IDs
	 * @param trakheesIdVOs
	 * @return
	 * List<Client>
	 */
	public List<Client> findByTrakheesIds(List<TrakheesIdVO> trakheesIdVOs);
	
	/**
	 * findByTrakheesId
	 * Method to find the Client domain object by the trakhees ID
	 * @param trakheesId
	 * @return
	 * Client
	 */
	public Client findByTrakheesId(String trakheesId);
	
}
